package metier;

import java.awt.List;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.EnumMap;
import java.util.GregorianCalendar;

import exception.BiblioException;
import metier.EmpruntEnCours;

public class Adherent extends Utilisateur {
        private String telephone;
        private static int nbMaxPrets = 3;
        private static int dureeMaxPrets = 15;
        private static EmpruntEnCours emp = null;
        private static ArrayList<EmpruntEnCours> list = new ArrayList<EmpruntEnCours>();
        public Adherent(String nom, String prenom, Calendar dateNaissance,
                        String sexe, int idUtilisateur, String pwd, String pseudonyme, int nbEmprunsEnCours, EmpruntEnCours emprunsEnCours) {
                super(nom, prenom, dateNaissance, sexe, idUtilisateur, pwd, pseudonyme, nbEmprunsEnCours, emprunsEnCours);
                this.telephone = telephone;
                this.nbMaxPrets = 3;
                this.dureeMaxPrets = 15;
               
        }
        public Adherent(String nom, String prenom, Calendar dateNaissance,
                String sexe, int idUtilisateur, String pwd, String pseudonyme, String tel) {
        super(nom, prenom, dateNaissance, sexe, idUtilisateur, pwd, pseudonyme, 0, null);
        this.telephone = tel;
        this.nbMaxPrets = 3;
        this.dureeMaxPrets = 15;   
}
    
     //   public static boolean isConditionsPretAcceptees() {
			 
     //          boolean cond1 = false;
              // boolean cond2 = false;
     //          Adherent ad = null;
     //          cond1 = EmpruntEnCours.isPretEnRetard(get);
             //  cond2 = nbEmpruntAtteint(ad);
     //          if(cond1 || list.size()>=3  )
     //       	   return true;
     //          else
     //       	   return false;    
    //    }
        
        public int getNbRetards() {
                return 0;
        }

        public static int getNbMaxPrets() {
                return nbMaxPrets;
        }

        public static void setNbMaxPrets(int nbMaxPrets) {
                Adherent.nbMaxPrets = nbMaxPrets;
        }

        public static int getDureeMaxPrets() {
                return dureeMaxPrets;
        }

        public static void setDureeMaxPrets(int dureeMaxPrets) {
                Adherent.dureeMaxPrets = dureeMaxPrets;
        }
        
        public String getTelephone() {
			return telephone;
		}
		public void setTelephone(String telephone) {
			this.telephone = telephone;
		}
		@Override
		public int getNbEmprunsEnCours() {
			return list.size();
		}
		@SuppressWarnings("static-access")
		@Override
        public ArrayList<EmpruntEnCours> addEmprunsEnCours(EmpruntEnCours ep) throws BiblioException {
			if(ep.isDispo(ep.getExemplaire()))
				if(list.size()>= nbMaxPrets) 
    			throw new BiblioException("nb de pret max atteint " + list.size()) ;
				else{
    				if(list.size()== 0){
						emp = new EmpruntEnCours(ep.getDateEmprunt(), ep.getExemplaire());
						list.add(emp);
						emp.getExemplaire().setStatus(EnumStatusExamplaire.PRETE);
						//list = ls; 
						
    				}
					else 
						
						for (int i = list.size()-1; i >= 0  ; i--) {
						Calendar c = list.get(i).getDateEmprunt();
						boolean cond = list.get(i).isPretEnRetard(c);
    						if(cond)
    							throw new BiblioException("L'adherent Ã  au moins un emprunt en retard " + list.size() + " " + list.get(i).getExemplaire().getIsbn()) ;
    						else
    							emp = new EmpruntEnCours(ep.getDateEmprunt(), ep.getExemplaire());
    							if(i==1 && list.get(i).hashCode()!=emp.hashCode())
    							{	list.add(emp);
    								emp.getExemplaire().setStatus(EnumStatusExamplaire.PRETE);}
    							else
    								if(list.size()==2 && i==0 && list.get(i+1).hashCode()!=emp.hashCode())
    								{	list.add(emp);
    									emp.getExemplaire().setStatus(EnumStatusExamplaire.PRETE);}
    								else if (list.size()==1 && i==0 && list.get(i).hashCode()!=emp.hashCode())
    								{	list.add(emp);
    									emp.getExemplaire().setStatus(EnumStatusExamplaire.PRETE);
    								}
    						}
						}
			else
				throw new BiblioException("L'exemplaire n'est pas disponible "+emp.getExemplaire().getIsbn());
				return list;
    		}
		
		//public ArrayList<EmpruntEnCours> addEmprunsEnCours() throws BiblioException {
		//	return list;
		//}
		
		public ArrayList <EmpruntEnCours> listEmprunsEnCours() {
			return list;
		}
		@Override
		public String toString() {
			return "Adherent \n"  +  super.toString() + "\nNÂ° telephone = " + telephone;
					
		}
		
}